mapRange 映射數值與滑鼠追蹤
這是一個在範圍之間進行數值映射的實用函數
gsap.utils.mapRange(inMin, inMax, outMin, outMax, valueToMap)
名稱 Name | 型別 Type | 屬性 Attributes | 預設 Default | 描述 Description |
---|---|---|---|---|
inMin | Number | 初始範圍的下限 | ||
inMax | Number | 初始範圍的上限 | ||
outMin | Number | 映射後範圍的下限 | ||
outMax | Number | 映射後範圍的上限 | ||
valueToMap | Number | 要進行映射的數值 |
基本操作
- 我現在有一個數值 945,假設該數值不會超過 1000
- 需要映射成 0 ~ 100
const x = gsap.utils.mapRange(
0, 1000, // 帶入值的最大與最小值
0, 100, // 輸出值的最大與最小值
945 // 帶入值
)
//expected output: 94.5
實務操作-追蹤滑鼠 mouse tracking
<div class="cursor"></div>
.cursor {
position: absolute;
width: 62px;
height: 62px;
background-color: #F993CD;
border-radius: 9999px
}
const handleMouseTrack = (e: MouseEvent) => {
// 追蹤滑鼠水平位置(百分比)
const x = gsap.utils.mapRange(0, window.innerWidth, 0, 100, e.clientX)
// 追蹤滑鼠垂直位置(百分比)
const y = gsap.utils.mapRange(0, window.innerHeight, 0, 100, e.clientY)
cursorEl.style.left = `${x}%`
cursorEl.style.top = `${y}%`
}
document.addEventListener("mousemove", handleMouseTrack)
- 將滑鼠座標
(e.clientX, e.clientY)
映射為百分比,另一方面滑鼠座標垂直與水平最大值剛好就是視窗寬高(window.innerWidth, window.innerHeight)
- 將滑鼠座標百分比賦予到 cursorEl 的 style 屬性 top、left
補充說明:
控制 DOM 元素 style 屬性的方式
這是原生 web api 寫法
cursorEl.style.left = `${x}%`
cursorEl.style.top = `${y}%`
也可以使用 gsap 來賦予 cursorEl 座標位置
gsap.set(cursorEl, {
left: `${x}%`,
top: `${y}%`
})
不使用 mapRange-以計算百分比為例
如果不使用 mapRange 的話,也可以用原生 js 的方式來計算百分比
document.addEventListener('pointermove', (e) => {
let x = parseInt(e.clientX / window.innerWidth * 100);
let y = parseInt(e.clientY / window.innerHeight * 100);
});